#!/usr/bin/evn python
# -*- coding: utf-8 -*-
"""
-------------------------------------------------
   文件名称 :     utils
   文件功能描述 :   功能描述
   创建人 :       小钟同学
   创建时间 :          2021/12/8
-------------------------------------------------
   修改描述-2021/12/8:         
-------------------------------------------------
"""
from jaeger_client import Config
import logging
import re
from opentracing.ext import tags as ot_tags


def grpc_opentracing_init():
    # 启动时候加入链路追踪的拦截器
    config = Config(
        # usually read from some yaml config---意思是配置信息其实可以从某个yaml文件进行读取
        config={
            # sampler 采样
            'sampler': {
                'type': 'const',  # 采样类型
                'param': 1,  # 采样开关 1：开启全部采样 0：关闭全部
            },
            # 配置链接到我们的本地的agent，通过agent来上报
            'local_agent': {
                # 注意这里是指定了JaegerAgent的host和port。
                # 根据官方建议为了保证数据可靠性，JaegerClient和JaegerAgent运行在同一台主机内，因此reporting_host填写为127.0.0.1。
                'reporting_host': '127.0.0.1',
                'reporting_port': 6831,
            },
            'logging': True,
        },
        # 这里填写应用名称---服务的名称
        service_name="grpc_serve",
        validate=True
    )
    tracer = config.initialize_tracer()
    return tracer


def _add_peer_tags(peer_str, tags):
    # 主要是解析出来我们的地址信息
    ipv4_re = r"ipv4:(?P<address>.+):(?P<port>\d+)"
    match = re.match(ipv4_re, peer_str)
    if match:
        tags[ot_tags.PEER_HOST_IPV4] = match.group('address')
        tags[ot_tags.PEER_PORT] = match.group('port')
        return
    ipv6_re = r"ipv6:\[(?P<address>.+)\]:(?P<port>\d+)"
    match = re.match(ipv6_re, peer_str)
    if match:
        tags[ot_tags.PEER_HOST_IPV6] = match.group('address')
        tags[ot_tags.PEER_PORT] = match.group('port')
        return
    logging.warning('Unrecognized peer: \"%s\"', peer_str)
